﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ChainAnalises.Classes.IntervalAnalysis;

namespace Segmentator.Dividers
{
    /// <summary>
    /// Сравнивает поступившее на вход слово и его позицию в цепи
    /// со словами и их вхождениями, которые находятся в принятом объекте.
    /// </summary>
    class DataComparer
    {
        private DataAfterIteration _match;
 
        public DataComparer(DataAfterIteration dataAfterIteration)
        {
            RenewData(dataAfterIteration);
        }

        public void RenewData(DataAfterIteration dataAfterIteration)
        {
            _match = dataAfterIteration;
        }

        /// <summary>
        /// Определяет, пересекается текущее слово со словами, которые были выделены ранее
        /// </summary>
        /// <param name="dictionaryEntry">Пара слово - позиция</param>
        /// <returns></returns>
        public bool IsCross(DictionaryEntry dictionaryEntry)
        {
            int in_lenght = ((Chain) dictionaryEntry.Key).Length;
            int in_left = ((int) dictionaryEntry.Value);
            int in_right = in_lenght + in_left - 1; 

            foreach (KeyValuePair<Chain, List<int>> de in _match.GetEntries())
            {
                int length = de.Key.Length;
  
                 for (int i = 0; i < de.Value.Count; i++)
                 {
                     int left = de.Value[i];
                     int right = length + left - 1;
                     bool cross = ((in_left < left) && (in_right < right)) || ((in_left > left) && (in_right > right)); 
                     if (!cross) return true;
                 }
           
            }
            return false;
        }
    }
}
